package com.wxzhou.wangzhuan;

import com.wxzhou.wangzhuan.config.CacheConfig;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;
import org.jboss.logging.Logger;

import java.nio.charset.Charset;

/**
 * 全局编码初始化器 - 在应用启动时设置全局编码
 */
@ApplicationScoped
public class GlobalEncodingInitializer {

    private static final Logger LOG = Logger.getLogger(GlobalEncodingInitializer.class);

    @Inject
    CacheConfig cacheConfig;

    /**
     * 在应用启动时设置全局编码
     */
    public void onStart(@Observes io.quarkus.runtime.StartupEvent ev) {
        LOG.info("=== 开始设置全局编码 ===");

        // 设置系统属性
        System.setProperty("file.encoding", "UTF-8");
        System.setProperty("user.language", "en");
        System.setProperty("user.country", "US");
        System.setProperty("sun.jnu.encoding", "UTF-8");

        // 强制设置默认字符集 - 使用反射强制修改
        try {
            java.lang.reflect.Field charsetField = Charset.class.getDeclaredField("defaultCharset");
            charsetField.setAccessible(true);
            charsetField.set(null, Charset.forName("UTF-8"));
            LOG.info("强制设置默认字符集为UTF-8");
        } catch (Exception e) {
            LOG.warn("无法强制设置默认字符集: " + e.getMessage());
        }

        // 再次尝试设置默认字符集
        try {
            java.lang.reflect.Field defaultCharsetField = Charset.class.getDeclaredField("defaultCharset");
            defaultCharsetField.setAccessible(true);
            defaultCharsetField.set(null, null); // 清除缓存
            Charset.forName("UTF-8"); // 重新加载
            LOG.info("重新加载默认字符集为UTF-8");
        } catch (Exception e) {
            LOG.warn("无法重新加载默认字符集: " + e.getMessage());
        }

        // 初始化缓存配置
        LOG.info("=== 初始化缓存配置 ===");
        cacheConfig.initializeCache();
    }
} 